package com.quan.component.redis;

import java.util.Map;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;

public interface JedisClient {
	
	public void set(String key, String value) ;
	public String get(String key) ;
	public boolean del(String key) ;
	public ScanResult<String> scan(String cursor, ScanParams params) ;
	
	
	public void set(byte[] key, byte[] value) ;
	public byte[] get(byte[] key) ;
	public boolean del(byte[] key) ;
	
	public void setHash(String key, String field, String value) ;
	public String getHash(String key, String field) ;
	public Map<String, String> getHashAll(String key) ;
	public boolean delHash(String key, String field) ;
	
	public void setHash(String key, String field, byte[] value) ;
	public byte[] getHashByte(String key, String field) ;
	public boolean delHashByte(String key, String field) ;
	
	/**
	 * 对存储在指定key的数值执行原子的加1操作
	 * @param key
	 */
	public void incr(String key) ;
	
	/**
	 * 设置生存时间
	 * @param key
	 * @param seconds
	 * @return
	 */
	public Long expire(String key, int seconds) ;
	public Long expire(byte[] key, int seconds) ;
	
	/**
	 * 以秒为单位，返回给定 key 的剩余生存时间(TTL, time to live)
	 * @param key
	 * @return 当 key 不存在时，返回 -2 。当 key 存在但没有设置剩余生存时间时，返回 -1 。否则，以秒为单位，返回 key 的剩余生存时间。
	 */
	public Long ttl(String key) ;
	public Long ttl(byte[] key) ;
	
	/**
	 * 检查给定 key 是否存在
	 * @param key
	 * @param seconds 若 key 存在，返回 true ，否则返回 false。
	 * @return
	 */
	public Boolean exists(String key, int seconds) ;
	public Boolean exists(byte[] key, int seconds) ;
	
	/**
	 * 清空所有缓存
	 */
	public void flushAll() ;
	
	/**
	 * 删除key
	 * @param keys
	 */
	public Long delKeys(String... keys) ;
	public Long delKeys(byte[]... kyes) ;
	
	public JedisPool getJedisPool() ;
	
}
